package cc.fs.zhihuapp.ui.receivers;

/**
 * Created by fostion on 1/5/16.
 */

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;

import cc.fs.zhihuapp.utils.MyCallback;

/**
 * 短信监听器，用来监听验证码获取，通过callback返回
 * 读取的验证码需要有一个有一个识别的模板这个模板需要传入
 * 这种监视方式有一种问题，部分系统手机无法监控所以暂时废弃（重要）
 */
public class SMSReceiver extends BroadcastReceiver {
    private static final String ACTION_SMS_RECEIVER = "android.provider.Telephony.SMS_RECEIVED";
    private MyCallback.Callback0<String> callback;
    private String format;


    public void e(String log) {
        Log.e("--SmsReceiverActivity--", log);
    }

    /**
     * 不要使用AndroidManifest.xml配置的方式注册Receiver,
     * 请使用Context.registerReceiver注册监听器, 因为初始化的时候要传入监听器
     */
//    public SMSReceiver(String _format, MyCallback.Callback0<String> _callback) {
//        this.format = _format;
//        this.callback = _callback;
//    }
//
//    public SMSReceiver(){
//        format = "今日头条";
//        e("开启短信截取广播");
//    }

    public boolean isTargetSms(SmsMessage sms) {
        if (sms == null) return false;
        if (sms.getMessageBody().contains(format)) {
            return true;
        }
        return false;
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        //筛选出短信action
        e("---短信截取成功---");
//            if (ACTION_SMS_RECEIVER.equals(intent.getAction())) {
        Bundle bundle = intent.getExtras();
        if (bundle != null) {
            Object[] pdus = (Object[]) bundle.get("pdus");
            SmsMessage[] smsArr = new SmsMessage[pdus.length];
            for (int i = 0; i < pdus.length; i++) {
                smsArr[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            }

            for (SmsMessage sms : smsArr) {
                e("--收到的短信是---  " + sms.getMessageBody());
                //判断是否目标短信
                if (sms != null && isTargetSms(sms)) {
                    String body = sms.getMessageBody();
                    if(callback != null)
                       callback.run(body);
                }
            }
        }// END if(bundle != null)
//            }
    }
}
